package com.example.music.controller;

import com.example.music.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.UUID;

/**
 * Created with IntelliJ IDEA.
 * ClassName: CommonController
 * Package: com.example.music.controller
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 * Date: 2023-04-14
 * Time: 21:57
 */
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {

    //读取配置文件
    @Value("${img.path}")
    private String pathImg;
    //pathImg = "E:/gitee/binary-TanHua/music/target/classes/static/images/"

    @PostMapping("/upload")
    public Result fileUpload(MultipartFile file, HttpServletRequest request){
        //这里MultipartFile的名称 要和前端input框的name要相同

        //1.获取原始文件名
        String fileNameAndType = file.getOriginalFilename();
        System.out.println(fileNameAndType);

        //2.截取文件名后缀
        //先获取到 后缀点的下标 返回指定索引 在此字符串中最后一次出现处的索引
        int index = fileNameAndType.lastIndexOf(".");
        System.out.println(index);
        //3.截取后缀 一个参数 从指定位置 截取到最后
        String suffix = fileNameAndType.substring(index);
        System.out.println(suffix);
        //4.以免文件名相同而覆盖 用UUID生成唯一文件名 加上后缀
        String newFile = UUID.randomUUID().toString() + suffix;
        System.out.println(newFile);

        //创建指定文件目录 写到配置文件中 方便修改
        File file1 = new File(pathImg);
        //判断目录是否 存在 不存在就创建
        if (!file1.exists()){
            file1.mkdirs();
        }
        //目录存在 传输文件
        try {
            file.transferTo(new File(pathImg + newFile));
            //上传成功
            return new Result(1,"上传成功",pathImg + newFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //上传成功
        return new Result(-1,"上传失败",null);
    }

    //图片的下载
    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){
        //输出流 ，通过输入流读取文件内容
        try {
            FileInputStream fileInputStream = new FileInputStream(pathImg + name);

            //输出流 通过输出流将文件写回浏览器,在浏览器展示图片
            ServletOutputStream servletOutputStream = response.getOutputStream();

            //响应的是图片 设置一个响应的类型 image/jpeg固定写法 代表的文件
            response.setContentType("image/jpeg");

            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fileInputStream.read(bytes)) != -1){
                servletOutputStream.write(bytes,0,len);
                servletOutputStream.flush();
            }
            servletOutputStream.close();
            fileInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //输出流 通过输出流将文件写回浏览器,在浏览器展示图片
    }



}
